package model

import (
	"time"
)

// Document 表示文档实体，包含文本内容和向量表示
type Document struct {
	ID      int64     `db:"id" json:"id"`
	Content string    `db:"content" json:"content"`
	Vector  []float32 `db:"vector" json:"vector"`
}

// LightDocument 表示简化的文档实体，不包含向量数据
type LightDocument struct {
	ID      int64  `json:"id"`
	Content string `json:"content"`
}

// SearchResult 表示搜索结果
type SearchResult struct {
	Document Document `json:"document"`
	Score    float32  `json:"score"` // 相似度分数
}

// LightSearchResult 表示不包含向量数据的搜索结果
type LightSearchResult struct {
	Document LightDocument `json:"document"`
	Score    float32       `json:"score"` // 相似度分数
}

// NewDocumentRequest 表示创建新文档的请求
type NewDocumentRequest struct {
	Content string `json:"content" binding:"required"`
}

// BatchDocumentCreateRequest 表示批量创建文档的请求
type BatchDocumentCreateRequest struct {
	Documents []NewDocumentRequest `json:"documents" binding:"required,min=1"`
}

// BatchDocumentCreateResponse 表示批量创建文档的响应
type BatchDocumentCreateResponse struct {
	Message string                 `json:"message"`
	Created int                    `json:"created_count"` // 成功创建的文档数量
	Failed  int                    `json:"failed_count"`  // 创建失败的文档数量
	Results []DocumentCreateResult `json:"results"`       // 每个文档的创建结果
}

// DocumentCreateResult 表示单个文档的创建结果
type DocumentCreateResult struct {
	ID       int64  `json:"id,omitempty"`        // 创建成功时的文档ID
	Content  string `json:"content"`             // 原始内容
	Success  bool   `json:"success"`             // 是否成功创建
	ErrorMsg string `json:"error_msg,omitempty"` // 创建失败时的错误信息
}

// BulkCreateRequest 表示批量创建虚拟测试数据的请求
type BulkCreateRequest struct {
	Count    int    `json:"count" binding:"required"`        // 要创建的文档数量
	Type     string `json:"type" binding:"required"`         // 数据类型: article, product, qa, mixed
	Prefix   string `json:"prefix,omitempty"`                // 文档内容前缀
	Keyword  string `json:"keyword,omitempty"`               // 包含的关键词，用于测试搜索
	Language string `json:"language,omitempty" default:"zh"` // 语言：zh, en
}

// BulkCreateResponse 表示批量创建响应
type BulkCreateResponse struct {
	Message  string   `json:"message"`
	Created  int      `json:"created_count"` // 成功创建的文档数量
	FirstID  int64    `json:"first_id"`      // 第一个创建的文档ID
	LastID   int64    `json:"last_id"`       // 最后一个创建的文档ID
	Examples []string `json:"examples"`      // 内容示例
}

// UpdateDocumentRequest 表示更新文档的请求
type UpdateDocumentRequest struct {
	ID      int64  `json:"id" binding:"required"`
	Content string `json:"content" binding:"required"`
}

// SearchRequest 表示搜索请求
type SearchRequest struct {
	Query    string  `json:"query" binding:"required"`
	Limit    int     `json:"limit,omitempty"`
	MinScore float32 `json:"min_score,omitempty"`
}

// CollectionConfig 表示文档集合配置
type CollectionConfig struct {
	Name       string `json:"name" binding:"required"`
	FilePath   string `json:"file_path,omitempty"`
	MemoryMode bool   `json:"memory_mode,omitempty"`
}

// CollectionCreateRequest 表示创建集合的请求
type CollectionCreateRequest struct {
	Collection CollectionConfig `json:"collection" binding:"required"`
}

// CollectionResponse 表示集合信息响应
type CollectionResponse struct {
	Name       string `json:"name"`
	FilePath   string `json:"file_path,omitempty"`
	MemoryMode bool   `json:"memory_mode"`
	Documents  int    `json:"documents_count"`
}

// CollectionInfo 表示增强的集合信息
type CollectionInfo struct {
	Name               string `json:"name"`
	IsActive           bool   `json:"is_active"`
	DocumentCount      int64  `json:"document_count"`
	CreatedAt          string `json:"created_at,omitempty"`
	CreatedAtFormatted string `json:"created_at_formatted,omitempty"`
}

// CollectionListResponse 表示集合列表响应
type CollectionListResponse struct {
	Collections []CollectionInfo `json:"collections"`
}

// CollectionMetadata 表示集合的元数据信息
type CollectionMetadata struct {
	Name          string    `json:"name"`
	FilePath      string    `json:"file_path"`
	CreatedAt     time.Time `json:"created_at"`
	Description   string    `json:"description,omitempty"`
	DocumentCount int64     `json:"document_count,omitempty"`
	LastModified  time.Time `json:"last_modified,omitempty"`
}

// CollectionsMetadata 表示集合元数据集合
type CollectionsMetadata struct {
	Collections []CollectionMetadata `json:"collections"`
}
